home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
051-075
/
disk_075
/
comm
/
phonelib.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
5KB
|
168 lines
/* Comm phone library routines */
#define PHONE 1
#include "globals.h"
extern void emits_tx(), emits_rx();
extern UBYTE *strncpy();
extern UBYTE *index();
extern struct MenuItem PhoneItem[];
#define strchr(s,c) index(s,c)
#define PLEN 32
#define SLEN 32
#define HLEN 32
#define ELEN 32
#define ILEN 32
static UBYTE prefix[ PLEN ] = "ATDT";
static UBYTE suffix[ SLEN ] = "\\r";
static UBYTE hangup[ HLEN ] = "\\w\\w+++\\w\\w\\w\\wATH\\r";
UBYTE doinit[ ILEN ] = "";
UBYTE doexit[ ELEN ] = "";
/* determine which library to use
if no name given on command line, use default library PHONELIB
otherwise, use the one on the command line
*/
void Init_phone_lib()
{
*alt_serv = NULL;
}
/* open phone library. Return 0 if not found, else return # of numbers
in the library.
read library data into structure pdir.
*/
int load_plib(fname)
UBYTE *fname;
{
int i,indx;
FILE *lib;
UBYTE *nl,temp[40],*file;
static UBYTE pbuff[ MAXLINE ],
*name = &pbuff[ 0 ],
*number = &pbuff[ NAMESIZE ],
*baud = &pbuff[ NAMESIZE+NBRSIZE ],
*comment = &pbuff[ NAMESIZE+NBRSIZE+BAUDSIZE ];
strcpy(temp,install.DefDir);
strcat(temp,fname);
file = fname;
if((lib = fopen(fname,"r")) == NULL) /* look in default dir */
{
file = temp; /* nope: try default */
if((lib = fopen(temp,"r")) == NULL)
return 0; /* not in default either, return */
}
strncpy(phonedir,file,MAXFNAME-1); phonedir[MAXFNAME-1] = NULL;
for(i = 0; i < MAXPHONE; i++)
pdir[i].number[0] = pdir[i].name[0] = NULL;
i = 0;
while (i < MAXPHONE)
{
if(fgets(pbuff, MAXLINE, lib) == NULL) /* read line from library */
break;
if( nl = strchr(pbuff,'\n')) /* remove \n from line */
*nl = NULL;
indx = strlen(pbuff);
while( indx < MAXLINE ) /* zero out unused fields */
pbuff[indx++] = NULL;
if(pbuff[0] == '<') /* a new modem prefix ? */
{
switch( toupper(pbuff[1]) )
{
case 'D':
case 'P': pbuff[ 2+PLEN ] = NULL;
strcpy(prefix,&pbuff[2]); break;
case 'T':
case 'S': pbuff[ 2+SLEN ] = NULL;
strcpy(suffix,&pbuff[2]); break;
case 'H': pbuff[ 2+HLEN ] = NULL;
strcpy(hangup,&pbuff[2]); break;
case 'E': pbuff[ 2+ELEN ] = NULL;
strcpy(doexit,&pbuff[2]); break;
case 'I': pbuff[ 2+ILEN ] = NULL;
strcpy(doinit,&pbuff[2]); break;
}
continue; /* OK, go get another line */
}
strncpy(pdir[i].name, name ,NAMESIZE);
strncpy(pdir[i].number, number ,NBRSIZE);
strncpy(pdir[i].baud, baud ,BAUDSIZE);
strncpy(pdir[i].comment,comment,COMTSIZE);
if( nl == NULL) /* if NULL, line extended beyond MAXLINE */
fgets(pbuff, MAXLINE, lib); /* discard rest of line */
if(pdir[i].name[0] == '|' || pdir[i].name[0] == NULL)
continue; /* ignore empty lines and our comment lines */
if(pdir[i].name[0] == '>') /* check for alternate service */
{
strcpy(alt_serv, pdir[i].number);
continue; /* overwrite entry */
}
i++;
}
fclose(lib);
if(i != 0)
return (i);
}
/* list the contents of the phone library entry to the screen
*/
void list_plib(item)
unsigned int item;
{
sprintf(sbuff,"\n%s%s%s%s\n", pdir[item].name,
pdir[item].number, pdir[item].baud, pdir[item].comment );
emits_rx(sbuff);
}
/* Dial number. Passed a pointer to a phone number string.
Append prefix needed to get modem to dial, then send the string
to the modem.
*/
void dial(num)
char *num;
{
int i;
unsigned char c;
if(*num)
{
i = 0;
sendout(prefix); /* start of dial string */
i = 0;
if(altservflg) /* send alt. service # if required */
sendout(alt_serv);
while(c = *num++) /* send phone number */
if(c == ' ' || c == '-') continue;
else sendchar(c);
sendout(suffix); /* terminate dial string */
}
altservflg = FALSE;
}
/* Hang up modem.
send hangup command string.
*/
hang_up()
{
sendout(hangup);
}